(in-ns 'shen)
    
(defun shen-compose (V511 V512)
    (cond ((= () V511) V512)
     ((cons? V511) (shen-compose (tl V511) ((cl/eval (hd V511)) V512)))
     (true V511)))

 
(defun
  macroexpand
  (V510)
  (let
      Y
    (shen-compose (cl/drop-while cl/nil?
                                   (cl/map #(cl/when-let [m (cl/ns-resolve 'shen %)] @m)
                                             (value '*macros*))) V510)
    (if (= V510 Y) V510 (shen-walk macroexpand Y))))	

(defun symbol? (X) (cl/symbol? X))	

(defun source? (X) (:source (cl/meta (cl/eval `(var ~X)))))